home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / diverses / leda / incl / b_queue.h < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-15  |  1.6 KB  |  80 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  2.1.1                                                 11-15-1991
  4. +
  5. +
  6. +  b_queue.h
  7. +
  8. +
  9. +  Copyright (c) 1991  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15.  
  16.  
  17.  
  18. #ifndef BQUEUEH
  19. #define BQUEUEH
  20.  
  21. //------------------------------------------------------------------------------
  22. // bounded queues
  23. //                                                                      
  24. // Stefan Naeher (1989)
  25. //------------------------------------------------------------------------------
  26.  
  27. #include <LEDA/basic.h>
  28.  
  29.  
  30. #define b_queue(type) name2(type,b_queue)
  31.  
  32. #define b_queuedeclare(type)\
  33. class b_queue(type){\
  34.         type* v;\
  35.         int n;\
  36.         int start;\
  37.         int end;\
  38. public:                                        \
  39. b_queue(type)(int s) \
  40. { if (s<1) error_handler(88,"b_queue: bad size");\
  41.   n = s+1; \
  42.   v = new type[n];\
  43.   if (v==0) error_handler(88,"b_queue: out of memory");\
  44.   start = end = 0; \
  45. }\
  46. \
  47. ~b_queue(type)() {}\
  48. \
  49. int empty() const { return (size()==0) ? true : false; }\
  50. \
  51. int size() const \
  52. { int s = end-start;\
  53.   return (s<0) ?  (n+s) : s;\
  54. }\
  55. \
  56. void append(type& a)\
  57. { v[end++] = a;\
  58.   end %= n;\
  59.   if (start==end) error_handler(88, "b_queue overflow");\
  60. }\
  61. \
  62. type pop()\
  63. { if (start==end) error_handler(88, "b_queue underflow");\
  64.   type x = v[start];\
  65.   start = (start+1) % n;\
  66.   return x;\
  67. }\
  68. \
  69. type top() const\
  70. { if (start==end) error_handler(88, "b_queue empty");\
  71.   return v[start];\
  72. }\
  73. \
  74. void clear() { start = end = 0; }\
  75. };
  76.  
  77.  
  78. #endif
  79.